/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.edu.fatec.ads.util;

import com.towel.swing.table.ObjectTableModel;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.plaf.basic.BasicInternalFrameUI;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author Ubirajara
 */
public class FrameUtil {

    private static FrameUtil singleton = null;
    public static String BLANK = "";
    public static int FIRST_SELECT = -1;

    private FrameUtil() {
    }

    public static FrameUtil getInstance(){
        if(singleton == null){
            singleton = new FrameUtil();
        }

        return singleton;
    }

    public void removerBarraTitulo(JInternalFrame internal){

        BasicInternalFrameUI frame = (BasicInternalFrameUI) internal.getUI();
        frame.setNorthPane(null);

    }

    public void centralizarFrame(JFrame frame){
        frame.setLocationRelativeTo(null);
    }

    public List<String> validaCampos(List<JComponent> componentesTela){
        List<String> erros = new ArrayList<String>();

        for (JComponent componente : componentesTela) {
            if(componente instanceof JTextField){
                erros = this.validaCampoTexto(componente, erros);
                continue;
            }

            if(componente instanceof JComboBox){
                erros = this.validaCampoComboBox(componente, erros);
                continue;
            }
        }

        return erros;
    }

    private List<String> validaCampoTexto(JComponent campo, List<String> erros){
        JTextField campoTexto = (JTextField) campo;

        if(campoTexto.getText() == null || campoTexto.getText().isEmpty()){
            erros.add(campoTexto.getName());
        }

        return erros;
    }

    private List<String> validaCampoComboBox(JComponent campo, List<String> erros){
        JComboBox campoComboBox = (JComboBox) campo;

        if(campoComboBox.getSelectedItem() == null){
            erros.add(campoComboBox.getName());
        }

        return erros;
    }

    public boolean isInteger(String numero){
        boolean validacao = false;

        try{
            int numeroConvertido = Integer.parseInt(numero);

            validacao = true;
        }catch(NumberFormatException cause){
            cause.getMessage();
        }

        return validacao;
    }

    public boolean isLong(String numero){
        boolean validacao = false;

        try{
            long numeroConvertido = Long.parseLong(numero);

            validacao = true;
        }catch(NumberFormatException cause){
            cause.getMessage();
        }

        return validacao;
    }


    public void limparComboBoxes(JComboBox[] comboBoxes){
        for (JComboBox comboBox : comboBoxes) {
            comboBox.setSelectedIndex(FIRST_SELECT);
        }
    }

    public void limparInputText(JTextField[] textFields){
        for (JTextField textField : textFields) {
            textField.setText(BLANK);
        }
    }

    public void limparTable(JTable tabela){
        DefaultTableModel tabelaConvertida = (DefaultTableModel) tabela.getModel();

        tabelaConvertida.getDataVector().removeAllElements();

        tabela.updateUI();
    }

    public void adicionarMensagemSucesso(String mensagem){
        JOptionPane.showMessageDialog(null, mensagem, "Sucesso!", JOptionPane.INFORMATION_MESSAGE);
    }

    public void adicionarMensagemAtencao(String mensagem){
        JOptionPane.showMessageDialog(null, mensagem, "Atenção!", JOptionPane.INFORMATION_MESSAGE);
    }

    public void adicionarMensagemErro(String mensagem){
        JOptionPane.showMessageDialog(null, mensagem, "Erro!", JOptionPane.ERROR_MESSAGE);
    }

    public void alterarTituloJanela(JInternalFrame frameFilho, String titulo){
        JFrame parent = (JFrame) frameFilho.getDesktopPane().getTopLevelAncestor();

        if(titulo != null){ 
            parent.setTitle("Faculdade de Tecnologia da Baixada Santista - " + titulo);
        }else{
            parent.setTitle("Faculdade de Tecnologia da Baixada Santista");
        }

    }

    public int adicionarMensagemConfirmacao(String mensagem){
        return JOptionPane.showConfirmDialog(null, mensagem, "Atenção!", JOptionPane.INFORMATION_MESSAGE);
    }

}